// interface 继承

interface Shape {
  name: string
}

interface Circle extends Shape {
  radius: number
}

interface Style {
  color: string
}

// 多重继承
interface Rectangle extends Shape, Style {
  width: number
  height: number
}

const rect: Rectangle = {
  width: 10,
  height: 10,
  name: 'rectangle',
  color: 'red',
}

interface Foo {
  id: string
}

interface Bar extends Foo {
  // id: string 不报错
  // id: number 报错 类型不兼容
}

// 多重继承时，如果多个父接口存在同名属性，那么这些同名属性不能有类型冲突，否则会报错
interface Hoo {
  id: number
}

// interface Baz extends Foo, Hoo {} 报错

type Country = {
  name: string
  capital: string
}

// interface 继承 type
interface CountryWithPop extends Country {
  population: number
}

// 注意，如果type命令定义的类型不是对象，interface 就无法继承

class MyClass {
  x: number = 666

  y(): boolean {
    return false
  }
}

// interface 继承 class
interface B extends MyClass {
  z: number
}

const b: B = {
  x: 888,
  z: 666,
  y(): boolean {
    return true
  }
}
